package br.com.affero.testewel.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.struts.upload.FormFile;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 * Classe utilitária para Uploads.
 * 
 * @author Welington Veiga
 * @since 22/12/2011
 *
 */
public class UploadUtil {

	/**
	 * Instância única
	 */
	private static UploadUtil instance;
	
	public static UploadUtil getInstance(){
		// Vamos construir caso não exista o/
		if(instance == null)
			instance = new UploadUtil();
		
		return instance;
	}
	
	/**
	 * Construtor privado.
	 */
	private UploadUtil(){}
	
	/**
	 * Método que faz o upload do arquivo.
	 * Escreve na pasta destination o conteúdo do arquivo enviado.
	 * 
	 * @param destination pasta destino
	 * @param source arquivo vindo para o struts via upload
	 * @return caminho compelto do mesmo após o upload
	 * @throws IOException
	 */
	public String write(File destination, FormFile source) throws IOException{
		
		// criando diretório de upload caso não exista.
		if(!destination.exists()){
			destination.mkdir();
	    }
		
		// Criando stream para o vovo arquivo
		File newFile = new File(destination,  source.getFileName());
		 
		// Só vamos fazer upload caso ele não exista.
		if(!newFile.exists()){
          FileOutputStream fos = new FileOutputStream(newFile);
          fos.write(source.getFileData());
          fos.flush();
          fos.close();
        } 
        
        return destination+File.separator+source.getFileName();
	}
	
	/**
	 * Método que apaga um dado arquivo.
	 * 	
	 * @param source arquivo que será apagado
	 */
	public void delete(String source){
		File file = new File(source);
		if(file.exists())
			file.delete();
	}
}
